package com.yuw.datatpye;

public class TestDriver01 {
    public static void main(String[] args) {
        // 调用子方法
        test01();
    }

    /**
     * java的基本数据类型
     */
    public static void test01() {
        /*
         变量声明的语法:
         变量类型  变量名 = 初始化值；
         或者：
         变量类型  变量名;
         */

        int iVale = 5; // 局部变量
        System.out.println("变量iVale = " + iVale);

        // 默认（自动）类型转换
        byte bValue = 2;
        // 此处发生了 数据类型默认转换； 从范围小的低类型（byte）专为范围到的高类型（int）
        int iValue2 = bValue;
        System.out.println("iValue2=" + iValue2);

        // 强制类型转换
        byte bValue2 = (byte) iValue2;
        System.out.println("bValue2=" + bValue2);

        // 使用后缀表示非默认类型的数据
        long lVaule = 1;// 右侧1是int类型，这里发生了默认数据类型转换
        long lVaule2 = 999999999999999999L;

        double dValue = 1.2;
        float fValue = (float) 1.2; // 右侧1.2默认数据类型是double类型，左侧是flaot类型，此处需要进行强制类型转换
        float fValue2 = 1.2F; // 数据类型后缀

        // 字符型
        char chVal = 'a'; // 英文字符
        char chVal2 = '小'; // 汉字
        char chaVal3 = '\u8888'; // unicode编码； \u8888表示的是一个字符的编码，这是一个整体，不可分的

        /*
        基本数据类型中几种常见的转换路线：
                byte --> short --> int -->long
                char --> int -->long
         */
        short sVal = bValue;

        int sVal2 = chVal2;

        // 如果运算结果为int类型，则运算结果中即便有小数部分，也值保留整数部分，小数部分会被舍弃
        int iVal4 = iVale / iValue2;
        System.out.println("5/2=" + iVal4);

        /*
        表达式的运算结果的数据类型和表达式中的最高类型保持一致；
        如果运算表达式中只有byte、short、char类型，则运算结果为int类型；【特殊情况】

         */
        int ivalue5 = bValue + iVal4;
        int iValue6 = sVal + chaVal3 + bValue; // 注意

        String strName = "小明"; // 字符串常量赋值
        String strName2 = "小李";

        String strName3 = new String("小明"); // 使用new创建一个对象进行赋值

        /*
         课堂作业：
             使用字符串常量进行赋值和使用new进行赋值的字符串变量有什么不同？【扩展作业】
         */

        String strNames = strName +' '+ strName2;
        System.out.println("字符串拼接：" + strNames);

    }
}
